package com.br.negocio.web.backbean;

import java.io.Serializable;

import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.br.negocio.controller.ControllerEstado;
import com.br.negocio.vo.EstadoVO;
import com.br.negocio.vo.PaisVO;
import com.br.negocio.web.formbean.EstadoFormBean;

@Controller("estadoBackBean")
@Scope("session")
public class EstadoBackBean implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Resource
	private ControllerEstado controllerEstado;
	
	private EstadoFormBean estadoFormBean;

	public EstadoBackBean() {
		super();
		this.estadoFormBean = new EstadoFormBean();
	}

	public EstadoFormBean getEstadoFormBean() {
		return this.estadoFormBean;
	}

	public void setEstadoFormBean(EstadoFormBean estadoFormBean) {
		this.estadoFormBean = estadoFormBean;
	}
	
	// M�TODOS

	public void obterListaEstado() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.estadoFormBean.setListaEstado(this.controllerEstado.obterListaEstado());
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao obter a lista de estado: " + e.getMessage()));
		}
	}
	
	public void manterEstado() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.estadoFormBean.getEstadoManter().setPaisVO(this.getEstadoFormBean().getPaisManter());
			this.controllerEstado.atualizarEstado(this.estadoFormBean.getEstadoManter());
			this.estadoFormBean.setIsDisabled(true);
			context.addMessage(null, new FacesMessage("Sucesso: Inser��o realizada com sucesso!"));
		} catch (Exception e) {
			context.addMessage(null , new FacesMessage("Erro ao manter o estado: " + e.getMessage()));
		}
		
	}
	
	public void excluirEstado() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			if (this.getEstadoFormBean().getEstadoManter().getCodigo() != 0) {
				this.controllerEstado.removerEstado(this.estadoFormBean.getEstadoManter());
				if (!this.estadoFormBean.getListaEstado().isEmpty()) {
					this.estadoFormBean.setListaEstado(this.controllerEstado.obterListaEstado());
				}
				this.estadoFormBean.setEstadoManter(new EstadoVO());
				context.addMessage(null, new FacesMessage("Sucesso: Estado exclu�do com sucesso!"));
			}
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao excluir o estado: " + e.getMessage()));
		}
	}
	
	// LISTENERS
	
	public void listenerIrInserirEstado(ActionEvent evento) {
		this.estadoFormBean.setPaisManter(new PaisVO());
		this.estadoFormBean.setEstadoManter(new EstadoVO());
		this.estadoFormBean.setIsDisabled(false);
		this.estadoFormBean.setHead("Cadastrar Estado");
	}
	
	public void listenerIrExcluirEstado(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoEstadoExcluir");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			EstadoVO estadoVO = new EstadoVO();
			estadoVO.setCodigo(codigo);
			this.estadoFormBean.setEstadoManter(this.controllerEstado.obterEstado(estadoVO));
			this.estadoFormBean.setPaisManter(this.estadoFormBean.getEstadoManter().getPaisVO());
		}
		this.estadoFormBean.setHead("Excluir Estado");
		this.estadoFormBean.setIsDisabled(true);
	}
	
	public void listenerIrEditarEstado(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoEstadoEditar");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			EstadoVO estadoVO = new EstadoVO();
			estadoVO.setCodigo(codigo);
			this.estadoFormBean.setEstadoManter(this.controllerEstado.obterEstado(estadoVO));
			this.estadoFormBean.setPaisManter(this.estadoFormBean.getEstadoManter().getPaisVO());
		}
		this.estadoFormBean.setHead("Editar Estado");
		this.estadoFormBean.setIsDisabled(false);
	}

}